package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

/***/
public class ExceptionDemo {
    public static void main(String[] args) {
//        method1();//调用用来暴露异常的方法
//        method2();//调用异常解决方案1--捕获处理--自己解决
//        method3();//调用异常解决方案2--向上抛出--别人解决
        f();
//        f2();
        f1();
    }

    private static void f1() {
        try{
            f2();
        }catch (Exception e){
            System.out.println("解决方案");
        }
    }

    private static void f2() throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入两个数");
        int a = scanner.nextInt();
        int b= scanner.nextInt();
        System.out.println(a/b);
    }

    private static void f() {
        try{
            method3();
        }catch (Exception e){
            System.out.println("解决方案");
        }
    }

    /**异常抛出的格式:在方法的小括号与大括号之间，写:throws 异常类型
     * 如果有多个异常，使用逗号分隔即可
     * 如果一个方法抛出了异常，那么谁来调用这个方法，谁就需要处理这个异常
     * 这里的处理也有两种方案:捕获解决 或者 继续向上抛出
     * 注意:我们一般会在main方法调用之前，将这个方法抛出的异常处理掉
     * 而不是将问题抛给main()，因为调用main()的是JVM，后面没人解决了，该报错还报错*/
//    private static void method3() throws ArithmeticException,InputMismatchException,Exception {
    private static void method3() throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入两个数");
        int a = scanner.nextInt();
        int b= scanner.nextInt();
        System.out.println(a/b);
    }
    /**异常捕获处理的格式
     * try{
     *     可能会抛出异常的代码
     * }catch(异常的类型 异常的名字){
     *     万一捕获到了预先设定的异常，进行处理的解决方案
     * }
     * try-catch结构可以嵌套，如果有异常类型需要特殊处理的话*/
    private static void method2() {
        try{
            Scanner scanner = new Scanner(System.in);
            System.out.println("请您输入两个数");
            int a = scanner.nextInt();
            int b= scanner.nextInt();
            System.out.println(a/b);
//        }catch (ArithmeticException e){
//            System.out.println("除数不能为0");
//        }catch (InputMismatchException e){
//            System.out.println("请输入规定的整数");
         /**使用多态的思想，不论是什么子异常，统一看作父类型Exception
          * 做出更加通用的解决方案，甚至可以只写这一个，*/
        }catch (Exception e){    //多态
            System.out.println("您输入的数据不对");
        }
    }

    private static void method1() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入两个数");
        int a = scanner.nextInt();
        int b= scanner.nextInt();
        System.out.println(a/b);
//        ArithmeticException  算数异常
//        InputMismatchException 输入不匹配异常
        /**1.不要害怕BUG,真正的勇士敢于直面自己写的BUG
         * 2.学会看报错的信息提示，确定自己错误的方向
         * 3.学会看报错的行号提示，确定自己报错的位置，哪里不对点哪里
         * 注意:源码不会错，要看的是自己写的代码*/
    }
}
